昨天我們針對path()的使用講解了一下,今天繼續針對其中的應用做探討。
在我們剛創建project時,打開urls.py可以看到下面就有提到Function views和Class-based views兩種,那為什麼會有兩種Views呢?
"""Django_project URL Configuration
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
"""
Function views 顧名思義就是基於Fuction(函式)所撰寫的view,像我們前幾天所寫的hello,一個Django project可以用很多個function來組成我們要的view,但是隨著專案越來越大,可以想像若一個views裡面有100個函式,那維護和擴充就會比較麻煩。因此就能將Function views封裝成Class-based views來增加重用性和可維護性。
我們前期會先以Function views 為主,Class-based views等之後才會再談。
我們透過建置頁面來練習Function Views的使用。
首先,延續我們前幾天寫的project,我們先利用Function View來設置我們的首頁。
我們先在Django_project,創建一個屬於Django_project的views.py。
並在views.py內打上以下程式碼。
#Django_app/views.py
from django.shortcuts import render
from django.http import HttpResponse
def Home(request):
return HttpResponse("This is Homepage!")
接著我們再回到Django_project內的urls.py,增加一行path,並將route設為空字串,這樣他就會一進到網址內就會是首頁! 如果Route是空值的話就會是網址本身唷!
#Django_app/urls.py
from django.contrib import admin
from django.urls import path, include
from . import views
urlpatterns = [
path('admin/', admin.site.urls),
path('hello/', include('Django_app.urls')),
path('', views.Home)
]
聰明的你應該知道為什麼要再創建一個views,因為要避免和不同的app混淆造成太多層的問題,所以我會把主要的頁面建立在Django_project內的views。
建置完首頁後,我們接著建置門市資訊以及關於我們的頁面。
我們回到APP的資料夾,在views.py內建立兩個函式。
#Django_app/views.py
from django.shortcuts import render
from django.http import HttpResponse
def hello(request,x,y):
return HttpResponse(f"Hello Django+{x}+{y}")
def aboutus(request):
return HttpResponse("關於我們")
def storeinfo(request):
return HttpResponse("門市資訊")
這樣我們就完成建置了頁面和他們的path。
今天的內容就先到這裡!我們明天繼續探討Views可以如何做使用,大家明天見!
https://docs.djangoproject.com/en/4.1/intro/tutorial03/#writing-more-views